package com.jiangwh.web.restful.security;

import java.util.HashMap;
import java.util.Map;

import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import com.jiangwh.domain.pojo.Customer;
import com.jiangwh.domain.pojo.Order;

@Path("/customerservice/")
public abstract class AbstractCustomerServiceSecured implements CustomerServiceSecured {
    
    protected long currentId = 123;
    protected Map<Long, Customer> customers = new HashMap<Long, Customer>();
    protected Map<Long, Order> orders = new HashMap<Long, Order>();

    protected AbstractCustomerServiceSecured() {
        init();
    } 

    @GET
    @Path("/customers/{id}/")
    @Produces(value={MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
    public abstract Response getCustomer(@PathParam("id") String id);

    @PUT
    @Path("/customers/{id}")
    public abstract Response updateCustomer(@PathParam("id") Long id, Customer customer);
    
    @POST
    @Path("/customers/")
    public abstract Response addCustomer(Customer customer);

    @DELETE
    @Path("/customers/{id}/")
    public abstract Response deleteCustomer(@PathParam("id") String id);

    @GET
    @Path("/orders/{orderId}/")
    @Produces(value={MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
    public abstract Order getOrder(@PathParam("orderId") String orderId);

    private void init() {
        Customer c = new Customer();
        c.setName("John");
        c.setId(123);
        customers.put(c.getId(), c);

        Order o = new Order();
        o.setDescription("order 223");
        o.setId(223);
        orders.put(o.getId(), o);
    }

}
